<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>#Include</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link href="../css/default.css" rel="stylesheet" type="text/css">
</head>
<body>

<h1>#Include / #IncludeAgain</h1>

<p>使得脚本认为指定文件的内容会出现在这个准确的位置.</p>

<pre class="Syntax">#Include FileOrDirName
#Include &lt;LibName&gt;
#IncludeAgain FileOrDirName </pre>
<h3>参数</h3>
<table class="info">
  <tr>
    <td width="15%" height="24">FileOrDirName</td>
    <td width="85%"><p><strong>File:</strong> 要包含的文件名, 如果未指定绝对路径则假定在启动/工作目录 (除了 <a href="../Scripts.htm#ahk2exe">ahk2exe</a>, 它会假定文件在脚本自身目录). 文件名 <strong>不能</strong> 包含变量名称 (除了 <a href="../Variables.htm#ScriptDir">%A_ScriptDir%</a>, <a href="../Variables.htm#AppData">%A_AppData%</a> 和 <a href="../Variables.htm#AppDataCommon">%A_AppDataCommon%</a>), 双引号或通配符. <a href="_EscapeChar.htm">转义序列</a> 除了分号 (<strong>`;</strong>) 外都不能使用, 它们也不需要, 因为字符如百分号被当成原义处理. 注意: <a href="SetWorkingDir.htm">SetWorkingDir</a> 对 #Include 没有效果因为在脚本开始执行前 #Include 就已经处理了.</p>
      <p><strong>Directory:</strong> 指定一个目录而不是文件从而改变后面所有出现的 #Include 和 <a href="FileInstall.htm">FileInstall</a> 使用的工作目录. 目录名不能包含除了 <a href="../Variables.htm#ScriptDir">%A_ScriptDir%</a>, <a href="../Variables.htm#AppData">%A_AppData%</a> 和 <a href="../Variables.htm#AppDataCommon">%A_AppDataCommon%</a> 以外的变量. 注意: 以这种方式改变工作目录不会改变脚本开始运行时的初始工作目录 (<a href="../Variables.htm#WorkingDir">A_WorkingDir</a>). 要改变初始工作目录, 请在脚本的顶部使用 <a href="SetWorkingDir.htm">SetWorkingDir</a>.</p></td>
  </tr>
  <tr>
    <td>LibName</td>
    <td><span class="ver">[AHK_L 57+]:</span> 库文件或函数名. 例如, <code>#include &lt;lib&gt;</code> 和 <code>#include &lt;lib_func&gt;</code> 都可以包含来自某个 <a href="../Functions.htm#lib">函数库文件夹</a> 的 lib.ahk.</td>
  </tr>
</table>
<h3>备注</h3>
<p>脚本认为包含的文件的内容实际会出现在 #Include 指令的准确位置 (就好像从包含的文件复制粘贴过来一样). 因此, 它通常不能把两个孤立的脚本合并成一个可运行的脚本 (要实现这样的效果, 参见 <a href="http://www.autohotkey.com/forum/topic18545.html">www.autohotkey.com/forum/topic18545.html</a>).</p>
<p>#Include 确保 <em>FileName</em> 仅被包含一次, 即使它遇到多次重复的包含. 与之相比, #IncludeAgain 则允许多次包含同个文件, 而在所有其他方面于 #Include 一样.</p>
<p>可以在 <em>FileName</em> 参数前加上 *i 和单个空格, 这样会使程序忽略加载包含的文件时产生的任何故障. 例如: <em>#Include *i SpecialOptions.ahk</em>. 此选项应该仅在包含的文件的内容对主脚本的操作可有可无的情况下才使用.</p>
<p>通过 <a href="ListLines.htm">ListLines</a> 或菜单 View-&gt;Lines 显示在主窗口的那些行总是按照它们在文件内部的物理顺序编号的. 换句话说, 包含一个新的文件将仅仅改变主脚本文件的一行编号, 即 #Include 所在行 (除了在 <a href="../Scripts.htm#ahk2exe">已编译脚本</a>, 它会在编译时把它们包含的文件合并成一个大的脚本).</p>
<p>#Include 也常用来加载在外部文件中定义的 <a href="../Functions.htm">函数</a>. 和子程序标签不同, <a href="../Functions.htm">函数</a> 可以在脚本的顶部包含而不影响 <a href="../Scripts.htm#auto">自动执行段</a>.</p>
<p>和其他 # 开头的指令一样, #Include 不能根据条件执行. 换句话说, 这个例子不起作用:</p>
<pre>if x = 1
    #Include SomeFile.ahk  <em>; 不论 x 的值是什么此行都会执行.</em>
    y = 2  <em>; 而此行属于上面的 IF 语句, 因为 # 指令不属于 IF 语句.</em></pre>
<p>通过调用 <a href="../Functions.htm#lib">库函数</a> 中的函数名称可以自动将文件包含进来 (即不需要使用 #Include).</p>
<h3>相关</h3>
<p> <a href="../Functions.htm#lib">函数库</a>, <a href="../Functions.htm">函数</a>, <a href="FileInstall.htm">FileInstall</a></p>
<h3>示例</h3>
<pre class="NoIndent">#Include C:\My Documents\Scripts\Utility Subroutines.ahk #Include %A_ScriptDir% <em>; Changes the working directory for subsequent #Includes and FileInstalls.</em>
#Include C:\My Scripts <em>; Same as above but for an explicitly named directory.</em></pre>

</body>
</html>
